\section{Desarrollo}

En este trabajo se hizo un an\'alisis de como es el comportamiento para la aproximaci\'on de la funci\'on $\sqrt{2}$
Las aproximaciones que vamos a utilizar son: 
\begin{itemize}
\item \textbf{El m\'etodo babilonio}

\begin{eqnarray}
x_0 & = & A \nonumber \\
x_{n+1} & = & \frac{1}{2} \Big( x_n + \frac{2}{x_n} \Big) \nonumber
\end{eqnarray}

  
\item \textbf{El m\'etodo binomial}
\begin{displaymath}
(1+x)^n \ =\ 1 + nx + \frac{n(n-1)}{2!}\: x^2 + \frac{n(n-1)(n-2)}{3!}\: x^3 + \dots
\end{displaymath}
\end{itemize}
	
Implementaci\'on
Como pide el enunciado, fue necesario implementar algoritmos para cada uno de los m\'etodos.
Al tener que utilizar una precisi\'on arbitraria y dado que el lenguaje utilizado no provee una herramienta con la que se pueda realizar las operaciones con esa precisi\'on, se implement\'o una clase que provee tales funcionalidades. Esta clase la llamamos Float y representa un n\'umero en punto flotante con \textit{t} bits de mantisa. Para ellos utilizamos como estructura de representaci\'on los siguientes campos.
	
\begin{itemize}
	\item \textbf{\_neg} indica si el n\'umero es negativo o positivo.
	\item \textbf{\_exp} representa el exponente en base 2 del n\'umero.
	\item \textbf{\_precision} la cantidad de bits que se utilizan para la mantisa del n\'umero.
	\item \textbf{\_mant} es un string el cual contiene una secuencia de unos y ceros que representan la mantisa del n\'umero.	
	\item \textbf{\_value} es el valor en decimal del n\'umero. Este campo se utiliza para que las operaciones matem\'aticas que se usan no requieran una implementaci\'on, si no que se utilizan las que provee el lenguaje con el tipo long double.
\end{itemize}
	
	
Nuestra implementaci\'on permite un m\'aximo de 52 bits para la representaci\'on de la mantisa. Esto se debe a que nuestra representaci\'on interna se lleva acabo con el tipo long double que tiene como m\'aximo 52 bits de mantisa. Esta decisi\'on fue tomada debido al poco tiempo que tuvimos para implementarlo, ya que de esa manera aprovechamos la representaci\'on decimal y las operaciones que admite el tipo long double. Otra manera de representar la aritm\'etica de precisi\'on arbitraria, que finalmente no llevamos adelante es la de plantear todas las operaciones, suma, multiplicaci\'on y divisi\'on en binario teniendo en cuenta la representaci\'on de la mantisa, sin descuidar que para un \textit{t} arbitrario hay que definir cuando se da un overflow y underflow. Esto requer\'ia bastante mas trabajo y teniendo en cuenta que 52 bits de precisi\'on brindan una buena representaci\'on para los c\'alculos que vamos a hacer nos quedamos con la opci\'on que tiene 52 bits m\'aximo de mantisa.

En cuanto a lo que es la implementaci\'on creemos que las funciones mas importantes son: 
	
\begin{itemize}
	\item \textbf{longDoubleToBinary} que dado un n\'umero en long double lo pasa a binario con la representaci\'on de la mantisa y el exponente.
	\item \textbf{binaryToLongDouble} la cual tomando la mantisa del n\'umero representado lo pasa a long double.
\end{itemize}
	
\textbf{Pseudoc\'odigo}\\

A continuaci\'on detallaremos el pseudoc\'odigo de los metodos babilonio y binomial.\\

\begin{ttfamily}
\textbf{babilonio}(aproximacion, terminos)\\
\indent\indent resultado $\leftarrow$ aproximacion\\
\indent\indent aux $\leftarrow$ 2\\
\indent\indent \textbf{para} i=0 \textbf{hasta} i<terminos\\
\indent\indent\indent resultado $\leftarrow$ (resultado + aux /resultado) / aux\\
\indent\indent\indent i $\leftarrow$ i + 1\\
\indent\indent \textbf{fin para}\\
\indent\indent \textbf{devolver} resultado\\


\textbf{binomial}(terminos)\\
\indent\indent	resultado $\leftarrow$ 1\\
\indent\indent factorial $\leftarrow$ 1\\
\indent\indent	n $\leftarrow$ 1/2\\
\indent\indent	acum $\leftarrow$ n\\
\indent\indent	iteracion $\leftarrow$ 1\\
\indent\indent	\textbf{mientras} iteracion $<$ terminos\\
\indent\indent\indent resultado $\leftarrow$ resultado + acum/fact\\
\indent\indent\indent acum $\leftarrow$ acum * (n - iteracion)\\
\indent\indent\indent iteracion $\leftarrow$ iteracion + 1\\
\indent\indent\indent factorial $\leftarrow$ factorial * iteracion\\
\indent\indent	\textbf{fin mientras}\\
\indent\indent \textbf{devolver} res\\
\end{ttfamily}

Aclaraciones:
	Como cantidad de terminos pusimos como valor por defecto 170, el cual nos parecio razonablemente grande como para aproximar de buena manera el valor.
	La implementacion de estos pseudocodigos para las variables que eran numericas se hizo con el tipo Float.
De esa manera todas las operaciones se realizan con la misma precision.
En el pseudocodigo pasamos por alto lo que tiene que ver con la precision de los numeros ya que nos parecia demasiado implementativo.

Los dos pseudocodigos anteriores dan como resultado la aproximaci\'on a $\sqrt{2}$

Para el c\'alculo del error relativo se utilizo la f\'ormula

\begin{displaymath}
	\frac{{\left|\sqrt{2} - \mathit{x}\right|}}{\sqrt{2}}
\end{displaymath}

Aplicamos la funcion \textit{sqrt(2)} de C++ que es una buena aproximaci\'on y lo consideramos como el ``valor real'' de $\sqrt{2}$. \emph{x} es el resultado de aplicar el m\'etodo babilonio o el \'metodo binomial con el tipo Float que implementamos.
\newpage